package chapter02.s03operator;

/**
 * 算术运算符
 * 关系运算符
 * 位运算符
 * 逻辑运算符
 * 赋值运算符
 * 条件运算符
 * instanceof 运算符
 * 字符串连接 +
 * new 运算符
 * <p>
 * 运算符优先级
 */
public class OperatorPrecedence {
    public static void main(String[] args) {
        // 优先级 从高到低: 一元 > 算术 > 关系 > 逻辑
        /*
        类别                  操作符                                       关联性
        后缀                  () [] .                                     (点操作符)	左到右
        一元	                 expr++ expr--                                 从左到右
        一元                  ++expr --expr + - ～ ！                       从右到左
        乘性                  * /％                                         左到右
        加性                  + -                                           左到右
        移位                  >> >>>  <<                                    左到右
        关系                  > >= < <=                                     左到右
        相等                  ==  !=                                        左到右
        按位与                 ＆                                            左到右
        按位异或                ^                                            左到右
        按位或                 |                                             左到右
        逻辑与                 &&                                            左到右
        逻辑或                 ||                                            左到右
        条件	                  ？：                                          从右到左
        赋值	              = + = - = * = / =％= >> = << =＆= ^ = | =         从右到左
        逗号                   ，                                            左到右
        */
        // 优先级 从高到低: 一元 > 算术 > 关系 > 逻辑
        System.out.println(3 + 4 * 5);
        System.out.println(3 < 4 && 4 < 5);
        System.out.println(1 > 2 + 1 || 3 < 4 && !(4 < 5));
        System.out.println(
                1 > 2 + 1
                        ||
                        3 < 4 && !(4 < 5));
    }
}
